Kanzi 中使用 OpenGL ES 3.0

Kanzi 支持 OpenGL ES 3.0 着色语言(GLSL ES 版本 300)。借助 OpenGL ES 3.0,您可以使用整数纹理、浮点以及多个渲染目标。例如,这样渲染出来的图像精度更高,您可以应用看起来更好的后处理效果,将 HDR 用于纹理和环境纹理,以及创建无缝的环境纹理。

使用 OpenGL ES 3.0 之前,确保您的目标平台支持 OpenGL ES 3.0。

要在 Kanzi 中使用 OpenGL ES 3.0:

设置 纹理的颜色格式

您可采用 .dds 格式将 HDR 和浮点图像导入您的 Kanzi Studio 工程,并设置使用这些图像的纹理的颜色格式。

要设置纹理的颜色格式:

  1. 工程 (Project) > 属性 (Properties)中,将目标图形 API (Target Graphics API) 设置为OpenGL ES 3
  2. 素材库 (Library) > 资源文件 (Resource Files) > 图像 (Images) 中,选择您要设置其颜色格式的图像。
  3. 属性 (Properties) 中,将目标格式 (Target Format) 属性设置为Raw
  4. 属性 (Properties) 中,将Raw 颜色格式 (Color Format in Raw) 属性设为您希望 Kanzi 用于解释该纹理的颜色格式。
  5. 素材库 (Library) > 材质和纹理 (Materials and Textures) > Textures 中,选择使用您在上述步骤中设置了颜色格式的图像的纹理,然后在属性 (Properties) 中设置:

设置渲染目标纹理的格式

设置渲染目标纹理的格式,以定义 GPU 使用的目标像素格式。

要设置渲染目标纹理的格式:

  1. 工程 (Project) > 属性 (Properties)中,将目标图形 API (Target Graphics API) 设置为OpenGL ES 3
  2. 素材库 (Library) > 材质和纹理 (Materials and Textures) > Textures 中选择或创建渲染目标纹理 (Render Target Texture)
  3. 属性 (Properties)纹理设置 (Texture Settings) 中,将 格式 (Format) 设为您要使用的目标像素格式。
  4. 如果您的渲染目标纹理采用整数目标格式,请将 缩小过滤器 (Minification Filter)放大过滤器 (Magnification Filter) 属性设为 最近点 (Nearest)

使用多个渲染目标

要使用多个渲染目标:

  1. 工程 (Project) > 属性 (Properties)中,将目标图形 API (Target Graphics API) 设置为OpenGL ES 3
  2. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) 中选择或创建旧渲染通道(已停用)(Legacy Render Pass, deprecated)
  3. 属性 (Properties) 中点击 并添加 渲染目标颜色 (Render Target Color) 属性。
    您可以向 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 添加并建立最多四个颜色附件。
  4. 将各个 渲染目标颜色 (Render Target Color) 属性设为您希望其渲染的位置。
    您可以将 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 设为渲染到屏幕或渲染到渲染目标颜色附件纹理。您必须按顺序设置彩色附件,没有间隙:
  5. 在着色器中,设为您要写入的布局位置。例如,如果您使用两个颜色附件纹理,在着色器中您可以设置
    layout(location = 0) out mediump vec4 outColor;
    layout(location = 1) out mediump vec3 outNormal;
  6. 如果您对 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 启用了 清除颜色 (Clear Color) 属性,对各 渲染目标颜色 (Render Target Color) 属性通过使用 清除颜色(颜色缓冲区 0)(Clear Color, Color Buffer 0) 将清除颜色设为 清除颜色(颜色缓冲区 3)(Clear Color, Color Buffer 3) 属性,或将 颜色缓冲区 0 清除值(浮点)(Color Buffer 0 Clear Value, float) (颜色缓冲区 0 清除值(整数)(Color Buffer 0 Clear Value, integer)) 设为 颜色缓冲区 3 清除值(浮点)(Color Buffer 3 Clear Value, float) (颜色缓冲区 3 清除值(整数)(Color Buffer 3 Clear Value, integer)) 属性:

选择运行时图形后端

在 Windows 操作系统中,您可以选择是否要在 Application::onConfigure() 函数中、application.cfg 中使用 OpenGL ES 或 OpenGL,或是否使用命令行参数(如您的目标支持的话)。

在命令行使用:

对于 application.cfgGraphicsBackend = type
onConfigure()configuration.defaultSurfaceProperties.type = type;
configuration.defaultSurfaceProperties.contextApi = contextAPI;
type

要使用 OpenGL ES 并将图形上下文设置为 EGL,请执行以下操作:

要使用 OpenGL 并将图形上下文设置为 WGL,请执行以下操作:

contextAPI

要使用 WGL,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_WGL

要使用 EGL,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_EGL

要使用 GLX,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_GLX

application.cfg 示例
# 为 OpenGL 渲染和 WGL 图形上下文设置表面目标。
GraphicsBackend = opengl
onConfigure() 示例
//为 OpenGL 渲染和 WGL 图形上下文设置表面目标。
configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_GL_ONLY;